package com.micro.core.page;

import com.alibaba.fastjson.JSON;
import com.micro.common.util.ConvertUtil;
import com.micro.common.util.ObjectUtil;
import lombok.Data;

import java.util.Map;

/**
 * @desc 分页方法
 * @author LevelCoder
 * @version V1.0.0
 * @email LevelCoder@126.com
 * @date 2019/12/2
 */
@Data
public class PageQuery {

    /**
     * 当前记录查询索引
     */
    private Integer pageNum;

    /**
     * 每页数据显示数量
     */
    private Integer pageSize;

    /**
     * 分页参数
     */
    private Pager pager;

    /**
     * <h2>构造分页请求参数  map中包含分页对象</h2>
     * @param map
     */
    public PageQuery(Map<String,Object> map){
        Pager pager = new Pager(ConvertUtil.toInt(map.get("pageNum")), ConvertUtil.toInt(map.get("pageSize")));
        splicingPaging(pager);
    }

    /**
     * <h2>构造分页请求参数 obj中包含分页对象</h2>
     * @param obj
     */
    public PageQuery(Object obj){
        Pager pager = JSON.toJavaObject((JSON) JSON.toJSON(obj),Pager.class);
        splicingPaging(pager);
    }

    /**
     * <h2>构造分页请求参数</h2>
     * @param pageNum
     * @param pageSize
     */
    public PageQuery(Integer pageNum,Integer pageSize){
        Pager pager = new Pager(pageNum,pageSize);
        splicingPaging(pager);
    }

    /**
     * <h2>拼接分页对象</h2>
     * @param pager {@link Pager} 分页对象
     */
    private void splicingPaging(Pager pager) {
        if(ObjectUtil.isEmpty(pager)){
            pager = new Pager();
        }
        if(ObjectUtil.isEmpty(pager.getPageNum())){
            pager.setPageNum(1);
        }
        if(ObjectUtil.isEmpty(pager.getPageSize())){
            pager.setPageSize(10);
        }
        this.pageNum = pager.getPageNum();
        this.pageSize = pager.getPageSize();
        this.pager = pager;
    }



}
